! function (a, b) {
    "function" == typeof define && (define.amd || define.cmd) ? define(function () {
        return b(a)
    }) : b(a, !0)
}(this, function (a, b) {
    function c(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.invoke(b, e(c), function (a) {
            h(b, a, d)
        }) : k(b, d)
    }

    function d(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.on(b, function (a) {
            d && d.trigger && d.trigger(a), h(b, a, c)
        }) : d ? k(b, d) : k(b, c)
    }

    function e(a) {
        return a = a || {}, a.appId = D.appId, a.verifyAppId = D.appId, a.verifySignType = "sha1", a.verifyTimestamp = D.timestamp + "", a.verifyNonceStr = D.nonceStr, a.verifySignature = D.signature, a
    }

    function f(a) {
        return {
            timeStamp: a.timestamp + "",
            nonceStr: a.nonceStr,
            "package": a["package"],
            paySign: a.paySign,
            signType: a.signType || "SHA1"
        }
    }

    function g(a) {
        return a.postalCode = a.addressPostalCode, delete a.addressPostalCode, a.provinceName = a.proviceFirstStageName, delete a.proviceFirstStageName, a.cityName = a.addressCitySecondStageName, delete a.addressCitySecondStageName, a.countryName = a.addressCountiesThirdStageName, delete a.addressCountiesThirdStageName, a.detailInfo = a.addressDetailInfo, delete a.addressDetailInfo, a
    }

    function h(a, b, c) {
        "openEnterpriseChat" == a && (b.errCode = b.err_code), delete b.err_code, delete b.err_desc, delete b.err_detail;
        var d = b.errMsg;
        d || (d = b.err_msg, delete b.err_msg, d = i(a, d), b.errMsg = d), c = c || {}, c._complete && (c._complete(b), delete c._complete), d = b.errMsg || "", D.debug && !c.isInnerInvoke && alert(JSON.stringify(b));
        var e = d.indexOf(":"),
            f = d.substring(e + 1);
        switch (f) {
            case "ok":
                c.success && c.success(b);
                break;
            case "cancel":
                c.cancel && c.cancel(b);
                break;
            default:
                c.fail && c.fail(b)
        }
        c.complete && c.complete(b)
    }

    function i(a, b) {
        var c = a,
            d = q[c];
        d && (c = d);
        var e = "ok";
        if (b) {
            var f = b.indexOf(":");
            e = b.substring(f + 1), "confirm" == e && (e = "ok"), "failed" == e && (e = "fail"), -1 != e.indexOf("failed_") && (e = e.substring(7)), -1 != e.indexOf("fail_") && (e = e.substring(5)), e = e.replace(/_/g, " "), e = e.toLowerCase(), ("access denied" == e || "no permission to execute" == e) && (e = "permission denied"), "config" == c && "function not exist" == e && (e = "ok"), "" == e && (e = "fail")
        }
        return b = c + ":" + e
    }

    function j(a) {
        if (a) {
            for (var b = 0, c = a.length; c > b; ++b) {
                var d = a[b],
                    e = p[d];
                e && (a[b] = e)
            }
            return a
        }
    }

    function k(a, b) {
        if (!(!D.debug || b && b.isInnerInvoke)) {
            var c = q[a];
            c && (a = c), b && b._complete && delete b._complete, console.log('"' + a + '",', b || "")
        }
    }

    function l(a) {
        if (!(v || w || D.debug || "6.0.2" > A || C.systemType < 0)) {
            var b = new Image;
            C.appId = D.appId, C.initTime = B.initEndTime - B.initStartTime, C.preVerifyTime = B.preVerifyEndTime - B.preVerifyStartTime, I.getNetworkType({
                isInnerInvoke: !0,
                success: function (a) {
                    C.networkType = a.networkType;
                    var c = "https://open.weixin.qq.com/sdk/report?v=" + C.version + "&o=" + C.isPreVerifyOk + "&s=" + C.systemType + "&c=" + C.clientVersion + "&a=" + C.appId + "&n=" + C.networkType + "&i=" + C.initTime + "&p=" + C.preVerifyTime + "&u=" + C.url;
                    b.src = c
                }
            })
        }
    }

    function m() {
        return (new Date).getTime()
    }

    function n(b) {
        x && (a.WeixinJSBridge ? b() : r.addEventListener && r.addEventListener("WeixinJSBridgeReady", b, !1))
    }

    function o() {
        I.invoke || (I.invoke = function (b, c, d) {
            a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d)
        }, I.on = function (b, c) {
            a.WeixinJSBridge && WeixinJSBridge.on(b, c)
        })
    }
    if (!a.jWeixin) {
        var p = {
            config: "preVerifyJSAPI",
            onMenuShareTimeline: "menu:share:timeline",
            onMenuShareAppMessage: "menu:share:appmessage",
            onMenuShareQQ: "menu:share:qq",
            onMenuShareWeibo: "menu:share:weiboApp",
            onMenuShareQZone: "menu:share:QZone",
            previewImage: "imagePreview",
            getLocation: "geoLocation",
            openProductSpecificView: "openProductViewWithPid",
            addCard: "batchAddCard",
            openCard: "batchViewCard",
            chooseWXPay: "getBrandWCPayRequest",
            openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
            startSearchBeacons: "startMonitoringBeacons",
            stopSearchBeacons: "stopMonitoringBeacons",
            onSearchBeacons: "onBeaconsInRange",
            consumeAndShareCard: "consumedShareCard",
            openAddress: "editAddress"
        },
            q = function () {
                var a = {};
                for (var b in p) a[p[b]] = b;
                return a
            }(),
            r = a.document,
            s = r.title,
            t = navigator.userAgent.toLowerCase(),
            u = navigator.platform.toLowerCase(),
            v = !(!u.match("mac") && !u.match("win")),
            w = -1 != t.indexOf("wxdebugger"),
            x = -1 != t.indexOf("micromessenger"),
            y = -1 != t.indexOf("android"),
            z = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad"),
            A = function () {
                var a = t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || t.match(/micromessenger\/(\d+\.\d+)/);
                return a ? a[1] : ""

            }(),
            B = {
                initStartTime: m(),
                initEndTime: 0,
                preVerifyStartTime: 0,
                preVerifyEndTime: 0
            },
            C = {
                version: 1,
                appId: "",
                initTime: 0,
                preVerifyTime: 0,
                networkType: "",
                isPreVerifyOk: 1,
                systemType: z ? 1 : y ? 2 : -1,
                clientVersion: A,
                url: encodeURIComponent(location.href)
            },
            D = {},
            E = {
                _completes: []
            },
            F = {
                state: 0,
                data: {}
            };
        n(function () {
            B.initEndTime = m()
        });
        var G = !1,
            H = [],
            I = {
                config: function (a) {
                    D = a, k("config", a);
                    var b = D.check === !1 ? !1 : !0;
                    n(function () {
                        if (b) c(p.config, {
                            verifyJsApiList: j(D.jsApiList)
                        }, function () {
                            E._complete = function (a) {
                                B.preVerifyEndTime = m(), F.state = 1, F.data = a
                            }, E.success = function (a) {
                                C.isPreVerifyOk = 0
                            }, E.fail = function (a) {
                                E._fail ? E._fail(a) : F.state = -1
                            };
                            var a = E._completes;
                            return a.push(function () {
                                l()
                            }), E.complete = function (b) {
                                for (var c = 0, d = a.length; d > c; ++c) a[c]();
                                E._completes = []
                            }, E
                        }()), B.preVerifyStartTime = m();
                        else {
                            F.state = 1;
                            for (var a = E._completes, d = 0, e = a.length; e > d; ++d) a[d]();
                            E._completes = []
                        }
                    }), D.beta && o()
                }, ready: function (a) {
                    0 != F.state ? a() : (E._completes.push(a), !x && D.debug && a())
                }, error: function (a) {
                    "6.0.2" > A || (-1 == F.state ? a(F.data) : E._fail = a)
                }, checkJsApi: function (a) {
                    var b = function (a) {
                        var b = a.checkResult;
                        for (var c in b) {
                            var d = q[c];
                            d && (b[d] = b[c], delete b[c])
                        }
                        return a
                    };
                    c("checkJsApi", {
                        jsApiList: j(a.jsApiList)
                    }, function () {
                        return a._complete = function (a) {
                            if (y) {
                                var c = a.checkResult;
                                c && (a.checkResult = JSON.parse(c))
                            }
                            a = b(a)
                        }, a
                    }())
                }, onMenuShareTimeline: function (a) {
                    d(p.onMenuShareTimeline, {
                        complete: function () {
                            c("shareTimeline", {
                                title: a.title || s,
                                desc: a.title || s,
                                img_url: a.imgUrl || "",
                                link: a.link || location.href,
                                type: a.type || "link",
                                data_url: a.dataUrl || ""
                            }, a)
                        }
                    }, a)
                }, onMenuShareAppMessage: function (a) {
                    d(p.onMenuShareAppMessage, {
                        complete: function () {
                            c("sendAppMessage", {
                                title: a.title || s,
                                desc: a.desc || "",
                                link: a.link || location.href,
                                img_url: a.imgUrl || "",
                                type: a.type || "link",
                                data_url: a.dataUrl || ""
                            }, a)
                        }
                    }, a)
                }, onMenuShareQQ: function (a) {
                    d(p.onMenuShareQQ, {
                        complete: function () {
                            c("shareQQ", {
                                title: a.title || s,
                                desc: a.desc || "",
                                img_url: a.imgUrl || "",
                                link: a.link || location.href
                            }, a)
                        }
                    }, a)
                }, onMenuShareWeibo: function (a) {
                    d(p.onMenuShareWeibo, {
                        complete: function () {
                            c("shareWeiboApp", {
                                title: a.title || s,
                                desc: a.desc || "",
                                img_url: a.imgUrl || "",
                                link: a.link || location.href
                            }, a)
                        }
                    }, a)
                }, onMenuShareQZone: function (a) {
                    d(p.onMenuShareQZone, {
                        complete: function () {
                            c("shareQZone", {
                                title: a.title || s,
                                desc: a.desc || "",
                                img_url: a.imgUrl || "",
                                link: a.link || location.href
                            }, a)
                        }
                    }, a)
                }, startRecord: function (a) {
                    c("startRecord", {}, a)
                }, stopRecord: function (a) {
                    c("stopRecord", {}, a)
                }, onVoiceRecordEnd: function (a) {
                    d("onVoiceRecordEnd", a)
                }, playVoice: function (a) {
                    c("playVoice", {
                        localId: a.localId
                    }, a)
                }, pauseVoice: function (a) {
                    c("pauseVoice", {
                        localId: a.localId
                    }, a)
                }, stopVoice: function (a) {
                    c("stopVoice", {
                        localId: a.localId
                    }, a)
                }, onVoicePlayEnd: function (a) {
                    d("onVoicePlayEnd", a)
                }, uploadVoice: function (a) {
                    c("uploadVoice", {
                        localId: a.localId,
                        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
                    }, a)
                }, downloadVoice: function (a) {
                    c("downloadVoice", {
                        serverId: a.serverId,
                        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
                    }, a)
                }, translateVoice: function (a) {
                    c("translateVoice", {
                        localId: a.localId,
                        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
                    }, a)
                }, chooseImage: function (a) {
                    c("chooseImage", {
                        scene: "1|2",
                        count: a.count || 9,
                        sizeType: a.sizeType || ["original", "compressed"],
                        sourceType: a.sourceType || ["album", "camera"]
                    }, function () {
                        return a._complete = function (a) {
                            if (y) {
                                var b = a.localIds;
                                b && (a.localIds = JSON.parse(b))
                            }
                        }, a
                    }())
                }, getLocation: function (a) { }, previewImage: function (a) {
                    c(p.previewImage, {
                        current: a.current,
                        urls: a.urls
                    }, a)
                }, uploadImage: function (a) {
                    c("uploadImage", {
                        localId: a.localId,
                        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
                    }, a)
                }, downloadImage: function (a) {
                    c("downloadImage", {
                        serverId: a.serverId,
                        isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
                    }, a)
                }, getLocalImgData: function (a) {
                    G === !1 ? (G = !0, c("getLocalImgData", {
                        localId: a.localId
                    }, function () {
                        return a._complete = function (a) {
                            if (G = !1, H.length > 0) {
                                var b = H.shift();
                                wx.getLocalImgData(b)
                            }
                        }, a
                    }())) : H.push(a)
                }, getNetworkType: function (a) {
                    var b = function (a) {
                        var b = a.errMsg;
                        a.errMsg = "getNetworkType:ok";
                        var c = a.subtype;
                        if (delete a.subtype, c) a.networkType = c;
                        else {
                            var d = b.indexOf(":"),
                                e = b.substring(d + 1);
                            switch (e) {
                                case "wifi":
                                case "edge":
                                case "wwan":
                                    a.networkType = e;
                                    break;
                                default:
                                    a.errMsg = "getNetworkType:fail"
                            }
                        }
                        return a
                    };
                    c("getNetworkType", {}, function () {
                        return a._complete = function (a) {
                            a = b(a)
                        }, a
                    }())
                }, openLocation: function (a) {
                    c("openLocation", {
                        latitude: a.latitude,
                        longitude: a.longitude,
                        name: a.name || "",
                        address: a.address || "",
                        scale: a.scale || 28,
                        infoUrl: a.infoUrl || ""
                    }, a)
                }, getLocation: function (a) {
                    a = a || {}, c(p.getLocation, {
                        type: a.type || "wgs84"
                    }, function () {
                        return a._complete = function (a) {
                            delete a.type
                        }, a
                    }())
                }, hideOptionMenu: function (a) {
                    c("hideOptionMenu", {}, a)
                }, showOptionMenu: function (a) {
                    c("showOptionMenu", {}, a)
                }, closeWindow: function (a) {
                    a = a || {}, c("closeWindow", {}, a)
                }, hideMenuItems: function (a) {
                    c("hideMenuItems", {
                        menuList: a.menuList
                    }, a)
                }, showMenuItems: function (a) {
                    c("showMenuItems", {
                        menuList: a.menuList
                    }, a)
                }, hideAllNonBaseMenuItem: function (a) {
                    c("hideAllNonBaseMenuItem", {}, a)
                }, showAllNonBaseMenuItem: function (a) {
                    c("showAllNonBaseMenuItem", {}, a)
                }, scanQRCode: function (a) {
                    a = a || {}, c("scanQRCode", {
                        needResult: a.needResult || 0,
                        scanType: a.scanType || ["qrCode", "barCode"]
                    }, function () {
                        return a._complete = function (a) {
                            if (z) {
                                var b = a.resultStr;
                                if (b) {
                                    var c = JSON.parse(b);
                                    a.resultStr = c && c.scan_code && c.scan_code.scan_result
                                }
                            }
                        }, a
                    }())
                }, openAddress: function (a) {
                    c(p.openAddress, {}, function () {
                        return a._complete = function (a) {
                            a = g(a)
                        }, a
                    }())
                }, openProductSpecificView: function (a) {
                    c(p.openProductSpecificView, {
                        pid: a.productId,
                        view_type: a.viewType || 0,
                        ext_info: a.extInfo
                    }, a)
                }, addCard: function (a) {
                    for (var b = a.cardList, d = [], e = 0, f = b.length; f > e; ++e) {
                        var g = b[e],
                            h = {
                                card_id: g.cardId,
                                card_ext: g.cardExt
                            };
                        d.push(h)
                    }
                    c(p.addCard, {
                        card_list: d
                    }, function () {
                        return a._complete = function (a) {
                            var b = a.card_list;
                            if (b) {
                                b = JSON.parse(b);
                                for (var c = 0, d = b.length; d > c; ++c) {
                                    var e = b[c];
                                    e.cardId = e.card_id, e.cardExt = e.card_ext, e.isSuccess = e.is_succ ? !0 : !1, delete e.card_id, delete e.card_ext, delete e.is_succ
                                }
                                a.cardList = b, delete a.card_list
                            }
                        }, a
                    }())
                }, chooseCard: function (a) {
                    c("chooseCard", {
                        app_id: D.appId,
                        location_id: a.shopId || "",
                        sign_type: a.signType || "SHA1",
                        card_id: a.cardId || "",
                        card_type: a.cardType || "",
                        card_sign: a.cardSign,
                        time_stamp: a.timestamp + "",
                        nonce_str: a.nonceStr
                    }, function () {
                        return a._complete = function (a) {
                            a.cardList = a.choose_card_info, delete a.choose_card_info
                        }, a
                    }())
                }, openCard: function (a) {
                    for (var b = a.cardList, d = [], e = 0, f = b.length; f > e; ++e) {
                        var g = b[e],
                            h = {
                                card_id: g.cardId,
                                code: g.code
                            };
                        d.push(h)
                    }
                    c(p.openCard, {
                        card_list: d
                    }, a)
                }, consumeAndShareCard: function (a) {
                    c(p.consumeAndShareCard, {
                        consumedCardId: a.cardId,
                        consumedCode: a.code
                    }, a)
                }, chooseWXPay: function (a) {
                    c(p.chooseWXPay, f(a), a)
                }, openEnterpriseRedPacket: function (a) {
                    c(p.openEnterpriseRedPacket, f(a), a)
                }, startSearchBeacons: function (a) {
                    c(p.startSearchBeacons, {
                        ticket: a.ticket
                    }, a)
                }, stopSearchBeacons: function (a) {
                    c(p.stopSearchBeacons, {}, a)
                }, onSearchBeacons: function (a) {
                    d(p.onSearchBeacons, a)
                }, openEnterpriseChat: function (a) {
                    c("openEnterpriseChat", {
                        useridlist: a.userIds,
                        chatname: a.groupName
                    }, a)
                }
            },
            J = 1,
            K = {};
        return r.addEventListener("error", function (a) {
            if (!y) {
                var b = a.target,
                    c = b.tagName,
                    d = b.src;
                if ("IMG" == c || "VIDEO" == c || "AUDIO" == c || "SOURCE" == c) {
                    var e = -1 != d.indexOf("wxlocalresource://");
                    if (e) {
                        a.preventDefault(), a.stopPropagation();
                        var f = b["wx-id"];
                        if (f || (f = J++ , b["wx-id"] = f), K[f]) return;
                        K[f] = !0, wx.ready(function () {
                            wx.getLocalImgData({
                                localId: d,
                                success: function (a) {
                                    b.src = a.localData
                                }
                            })
                        })
                    }
                }
            }
        }, !0), r.addEventListener("load", function (a) {
            if (!y) {
                var b = a.target,
                    c = b.tagName;
                b.src;
                if ("IMG" == c || "VIDEO" == c || "AUDIO" == c || "SOURCE" == c) {
                    var d = b["wx-id"];
                    d && (K[d] = !1)
                }
            }
        }, !0), b && (a.wx = a.jWeixin = I), I
    }
});